// pages/serve/serve.js
import request from '../../utils/request';

Page({

  /**
   * 页面的初始数据
   */
  data: {
    showModal: false,        // 弹窗初始隐藏
    serviceList: [],         // 服务列表（从接口加载）
    familyList: [],          // 家人列表（从接口加载）
    currentService: null,    // 当前选中的服务
    selectedFamily: '',      // 选中的家人名称
    selectedFamilyId: null,  // 选中的家人ID
    selectedTime: '',        // 选中的服务时间（格式：yyyy-MM-dd HH:mm:ss）
    selectedTimeDisplay: '', // 显示的时间格式
    loading: true,           // 加载状态
    
    // 时间选择器相关数据
    timePickerValue: [0, 0, 0, 0, 0],  // 选中的索引 [年, 月, 日, 时, 分]
    timePickerRange: [],                // 选择器的所有选项
    years: [],                          // 年份数组
    months: [],                         // 月份数组
    days: [],                           // 日期数组
    hours: [],                          // 小时数组
    minutes: []                         // 分钟数组
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.initTimePicker();  // 初始化时间选择器
    this.loadServiceList();
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 每次显示页面时刷新服务列表（防止数据过期）
    this.loadServiceList();
  },

  /**
   * 加载服务列表（调用后端接口）
   */
  loadServiceList() {
    const that = this;
    that.setData({ loading: true });

    request({
      url: '/le/item/wx/list',
      method: 'GET',
      success: (res) => {
        console.log('服务列表数据：', res);
        if (res.statusCode === 200 && res.data.code === 200) {
          const serviceList = res.data.data.map(item => {
            return {
              ...item,
              // 处理图片路径
              image: item.image && item.image.startsWith('http') 
                ? item.image 
                : `http://localhost:8080${item.image || '/images/pic-xy@2x.png'}`
            };
          });
          
          that.setData({
            serviceList: serviceList,
            loading: false
          });
        } else {
          that.setData({ loading: false });
          wx.showToast({
            title: res.data.msg || '加载服务失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        console.error('加载服务列表失败：', err);
        that.setData({ loading: false });
        wx.showToast({
          title: '网络请求失败',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 点击购买按钮，显示弹窗
   */
  showModal(e) {
    const serviceId = e.currentTarget.dataset.id;
    const service = this.data.serviceList.find(item => item.id === serviceId);
    
    if (!service) {
      wx.showToast({
        title: '服务信息不存在',
        icon: 'none'
      });
      return;
    }

    // 检查是否登录
    const app = getApp();
    if (!app.globalData.userId) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
      setTimeout(() => {
        wx.switchTab({
          url: '/pages/my/my'
        });
      }, 1500);
      return;
    }

    this.setData({
      showModal: true,
      currentService: service,
      selectedFamily: '',
      selectedFamilyId: null,
      selectedTime: '',
      selectedTimeDisplay: ''
    });

    // 加载家人列表
    this.loadFamilyList();
  },

  /**
   * 隐藏弹窗
   */
  hideModal() {
    this.setData({ showModal: false });
  },

  /**
   * 加载家人列表（调用后端接口）
   */
  loadFamilyList() {
    const app = getApp();
    const wxUserId = app.globalData.userId;
    const token = wx.getStorageSync('token');

    if (!wxUserId) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
      return;
    }

    request({
      url: '/le/elderly/list/family',
      method: 'GET',
      data: { wxUserId: wxUserId },
      success: (res) => {
        console.log('家人列表数据：', res);
        if (res.statusCode === 200 && res.data.code === 200) {
          this.setData({
            familyList: res.data.data || []
          });
        } else {
          wx.showToast({
            title: res.data.msg || '获取家人列表失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        console.error('获取家人列表失败：', err);
        wx.showToast({
          title: '网络请求失败',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 显示家人选择器
   */
  showFamilyPicker() {
    const familyList = this.data.familyList;
    
    if (!familyList || familyList.length === 0) {
      wx.showModal({
        title: '提示',
        content: '您还没有绑定家人，是否前往绑定？',
        confirmText: '去绑定',
        success: (res) => {
          if (res.confirm) {
            this.hideModal();
            wx.switchTab({
              url: '/pages/family/family'
            });
          }
        }
      });
      return;
    }

    const familyNames = familyList.map(item => item.elderlyName);
    
    wx.showActionSheet({
      itemList: familyNames,
      success: (res) => {
        const selectedIndex = res.tapIndex;
        const selectedFamily = familyList[selectedIndex];
        
        this.setData({
          selectedFamily: selectedFamily.elderlyName,
          selectedFamilyId: selectedFamily.elderlyId
        });
      },
      fail: (err) => {
        console.log('取消选择家人');
      }
    });
  },

  /**
   * 初始化时间选择器数据（从明天开始）
   */
  initTimePicker() {
    const now = new Date();
    const tomorrow = new Date(now.getTime() + 24 * 60 * 60 * 1000);
    
    // 生成年份数组（未来3年）
    const currentYear = tomorrow.getFullYear();
    const years = [];
    for (let i = 0; i < 3; i++) {
      years.push(`${currentYear + i}年`);
    }
    
    // 生成月份数组
    const months = [];
    for (let i = 1; i <= 12; i++) {
      months.push(`${i}月`);
    }
    
    // 生成日期数组（根据年月动态计算）
    const days = this.getDaysInMonth(currentYear, tomorrow.getMonth() + 1);
    
    // 生成小时数组（8:00-18:00）
    const hours = [];
    for (let i = 8; i <= 18; i++) {
      hours.push(`${String(i).padStart(2, '0')}时`);
    }
    
    // 生成分钟数组（00, 30）
    const minutes = ['00分', '30分'];
    
    // 设置默认选中明天14:00
    const defaultYearIndex = 0;
    const defaultMonthIndex = tomorrow.getMonth();
    const defaultDayIndex = tomorrow.getDate() - 1;
    const defaultHourIndex = 6; // 14时 (14-8=6)
    const defaultMinuteIndex = 0; // 00分
    
    this.setData({
      years: years,
      months: months,
      days: days,
      hours: hours,
      minutes: minutes,
      timePickerRange: [years, months, days, hours, minutes],
      timePickerValue: [defaultYearIndex, defaultMonthIndex, defaultDayIndex, defaultHourIndex, defaultMinuteIndex]
    });
  },

  /**
   * 获取指定年月的天数
   */
  getDaysInMonth(year, month) {
    const daysCount = new Date(year, month, 0).getDate();
    const days = [];
    for (let i = 1; i <= daysCount; i++) {
      days.push(`${i}日`);
    }
    return days;
  },

  /**
   * 时间选择器列变化时触发（用于更新日期列）
   */
  onTimePickerColumnChange(e) {
    const { column, value } = e.detail;
    const { timePickerValue, years, months } = this.data;
    
    // 更新当前列的选中值
    timePickerValue[column] = value;
    
    // 如果年份或月份改变，需要更新日期列
    if (column === 0 || column === 1) {
      const year = parseInt(years[timePickerValue[0]]);
      const month = timePickerValue[1] + 1;
      const days = this.getDaysInMonth(year, month);
      
      // 如果当前选中的日期超出了新月份的天数，重置为1号
      if (timePickerValue[2] >= days.length) {
        timePickerValue[2] = 0;
      }
      
      const timePickerRange = this.data.timePickerRange;
      timePickerRange[2] = days;
      
      this.setData({
        timePickerRange: timePickerRange,
        timePickerValue: timePickerValue,
        days: days
      });
    }
  },

  /**
   * 时间选择器确认选择
   */
  onTimePickerChange(e) {
    const value = e.detail.value;
    const { years, months, days, hours, minutes } = this.data;
    
    // 解析选中的值
    const year = parseInt(years[value[0]]);
    const month = String(value[1] + 1).padStart(2, '0');
    const day = String(value[2] + 1).padStart(2, '0');
    const hour = String(value[3] + 8).padStart(2, '0'); // 从8点开始
    const minute = value[4] === 0 ? '00' : '30';
    
    // 验证选择的时间是否是明天及以后
    const selectedDate = new Date(`${year}-${month}-${day} ${hour}:${minute}:00`);
    const tomorrow = new Date(new Date().getTime() + 24 * 60 * 60 * 1000);
    tomorrow.setHours(0, 0, 0, 0);
    
    if (selectedDate < tomorrow) {
      wx.showToast({
        title: '服务时间必须是明天及以后',
        icon: 'none'
      });
      return;
    }
    
    // 格式化时间
    const selectedTime = `${year}-${month}-${day} ${hour}:${minute}:00`;
    const displayTime = `${year}年${month}月${day}日 ${hour}:${minute}`;
    
    this.setData({
      timePickerValue: value,
      selectedTime: selectedTime,
      selectedTimeDisplay: displayTime
    });
  },

  /**
   * 跳转到订单确认页面
   */
  toPay() {
    const { currentService, selectedFamilyId, selectedFamily, selectedTime, selectedTimeDisplay } = this.data;
    const app = getApp();
    const wxUserId = app.globalData.userId;

    // 验证参数
    if (!currentService) {
      wx.showToast({
        title: '服务信息异常',
        icon: 'none'
      });
      return;
    }

    if (!selectedFamilyId) {
      wx.showToast({
        title: '请选择家人',
        icon: 'none'
      });
      return;
    }

    if (!selectedTime) {
      wx.showToast({
        title: '请选择服务时间',
        icon: 'none'
      });
      return;
    }

    if (!wxUserId) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
      return;
    }

    // 关闭弹窗
    this.setData({
      showModal: false
    });

    // 将订单信息存储到全局数据中（避免URL中文编码问题）
    app.globalData.orderConfirmData = {
      serviceInfo: {
        id: currentService.id,
        name: currentService.name,
        price: currentService.price,
        unit: currentService.unit,
        image: currentService.image
      },
      familyId: selectedFamilyId,
      familyName: selectedFamily,
      serviceTime: selectedTimeDisplay,
      serviceTimeStr: selectedTime
    };

    // 跳转到订单确认页面
    wx.navigateTo({
      url: '/pages/serve/confirm/confirm'
    });
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.loadServiceList();
    wx.stopPullDownRefresh();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})